package es.ucm.fdi.xtremeaudio.modelo.beans;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.Timer;

import es.ucm.fdi.xtremeaudio.controlador.Controlador;
import es.ucm.fdi.xtremeaudio.modelo.dao.Player;

/**
 * <ul>
 * <li><b>Proyecto:</b> XtremeAudio</li>
 * <li><b>Grupo:</b> 7 <i>(4&deg;B)</i></li>
 * <li><b>Asignatura:</b> Ingenier&iacute;a del Software</li>
 * <li><b>Curso:</b> 2010/2011</li>
 * <li><b>Centro:</b> Universidad Complutense de Madrid</li>
 * </ul>
 * 
 * La clase <b>Bean</b> representa el estado general de la aplicaci&oacute;n.
 * Proporciona acceso al estado actual de la reproducci&oacute;n, como el
 * reproductor, su estado, su archivo cargado y su tiempo actual. Adem&aacute;s,
 * contiene la representaci&oacute;n de la biblioteca en forma de objeto y tiene
 * un temporizador que le sirve al controlador para comunicar con la vista a la
 * hora de mostrar correctamente los datos de la reproducci&oacute;n actual.
 * 
 * @author &Aacute;lvaro G&oacute;mez Porris
 * @author Elena Hern&aacute;ndez Delgado
 * @author Mar&iacute;a Trinidad Mart&iacute;n Campos
 * @author Mois&eacute;s Mart&iacute;nez Montes
 * @author Mat&iacute;as Salinero Delgado
 * 
 * @version %I%, %G%
 * 
 * @since 1.0
 * 
 * @see Biblioteca
 * @see Player
 * @see javax.swing.Timer
 */
public class Bean {

	/** Representa el estado actual como reproduciendo (como texto) */
	public static String REPRODUCIENDO = "Reproduciendo";
	
	/** Representa el estado actual como pausado (como texto) */
	public static String PAUSADO = "Pausado";
	
	/** Representa el estado actual como parado (como texto) */
	public static String PARADO = "Parado";
	
	private File archivo = null;
	private Biblioteca biblioteca = new Biblioteca();
	private String estado = PARADO;
	private Player player = new Player();
	private int tiempoActual = 0;
	private Timer timer = new Timer(1000, new ActionListener() {

		public void actionPerformed(ActionEvent e) {
			Controlador.actualizaDatos();
		}
	});

	/**
	 * Constructora por defecto. Inicializa el reproductor, el timer y la
	 * biblioteca por defecto, adem&aacute;s del estado de la
	 * reproducci&oacute;n (que se considera &quot;Parado&quot;).
	 */
	public Bean() {}

	/**
	 * Accesora de archivo.
	 * 
	 * @return archivo El archivo actual cargado en el reproductor.
	 */
	public File getArchivo() {
		return archivo;
	}

	/**
	 * Accesora de la biblioteca.
	 * 
	 * @return La biblioteca.
	 * 
	 * @see Biblioteca
	 */
	public Biblioteca getBiblioteca() {
		return biblioteca;
	}

	/**
	 * Accesora de estado.
	 * 
	 * @return estado El estado actual.
	 */
	public String getEstado() {
		return estado;
	}

	/**
	 * Accesora del reproductor actual.
	 * 
	 * @return player
	 * 
	 * @see Player
	 */
	public Player getPlayer() {
		return player;
	}

	/**
	 * Accesora de tiempo actual de reproducci&oacute;n.
	 * 
	 * @return El tiempo actual de reproducci&oacute;n.
	 */
	public int getTiempoActual() {
		return tiempoActual;
	}

	/**
	 * Accesora del temporizador.
	 * 
	 * @return EL temporizador.
	 * 
	 * @see javax.swing.Timer
	 */
	public Timer getTimer() {
		return timer;
	}

	/**
	 * Modificadora de archivo.
	 * 
	 * @param archivo
	 *            El nuevo archivo.
	 */
	public void setArchivo(File archivo) {
		this.archivo = archivo;
	}

	/**
	 * Modificadora de la biblioteca.
	 * 
	 * @param biblioteca
	 *            La nueva biblioteca.
	 * 
	 * @see Biblioteca
	 */
	public void setBiblioteca(Biblioteca biblioteca) {
		this.biblioteca = biblioteca;
	}

	/**
	 * Modificadora de estado.
	 * 
	 * @param estado
	 *            El nuevo estado.
	 */
	public void setEstado(String estado) {
		this.estado = estado;
	}

	/**
	 * Modificadora del reproductor actual.
	 * 
	 * @param player
	 *            El nuevo reproductor.
	 * 
	 * @see Player
	 */
	public void setPlayer(Player player) {
		this.player = player;
	}

	/**
	 * Modificadora de tiempo actual de reproducci&oacute;n.
	 * 
	 * @param tiempoActual
	 *            El nuevo tiempo actual
	 */
	public void setTiempoActual(int tiempoActual) {
		this.tiempoActual = tiempoActual;
	}

	/**
	 * Modificadora del temporizador.
	 * 
	 * @param timer
	 *            El nuevo temporizador.
	 * 
	 * @see javax.swing.Timer
	 */
	public void setTimer(Timer timer) {
		this.timer = timer;
	}

}